import { LineCapType, LineJoinType } from './enum';

export type CanvasPlusOptions = {
  /**
   * 容器
   * @type {string|HTMLElement}
   */
  container: string | HTMLElement;
  /**
   * 画布宽度
   * @type {number}
   */
  width: number;
  /**
   * 画布高度
   * @type {number}
   */
  height: number;
};

export type RegionOptions = {
  path?: Path2D, // 对象， 描述点击区的区域范围。 如果不给此属性赋值， 则会使用当前的路径。
  fillRule?: 'nonzero' | string, // 遵循的填充规则（默认是“nonzero”）。
  id: string, // 点击区的ID，在事件中可以引用此ID，就像示例中那样。
  parentID?: string, // 父区域的ID，为了光标回退或者辅助工具导航 。
  cursor?: 'inherit' | string // 鼠标移动到点击区时的 cursor（默认是 "inherit"）。继承父点击区域的光标，或者canvas元素的光标。
  control?: null | Element, // 触发事件的元素（canvas的子孙元素）。 默认为 null。
  label?: null | string // 如果没有control属性，文本标签作为辅助工具，用作点击区域的描述。 默认为 null。
  role?: null // 如果没有control属性，ARIA role 作为辅助工具，决定如何表示点击区域。 默认为 null.
};

export type GroupMeta = {
  label: string
};

export type AbstractShapeOptions = {
  // x坐标
  x?: number,
  // y坐标
  y?: number,
  // 填充颜色
  fillStyle?: string | CanvasGradient | CanvasPattern,
  // 描边颜色
  strokeStyle?: string | CanvasGradient | CanvasPattern,
  // 指定如何绘制每一条线段末端的属
  lineCap?: LineCapType,
  // 设置虚线偏移量的属性
  lineDashOffset?: number,
  // 两条线连接时，连接区域的样式
  lineJoin?: LineJoinType,
  // 线段宽度
  lineWidth?: number,
  // 模糊阴影
  shadowBlur?: number,
  // 阴影颜色
  shadowColor?: string,
  // 阴影水平偏移量
  shadowOffsetX?: number,
  // 阴影垂直偏移量
  shadowOffsetY?: number,
  [key: string]: any
};

export type AbstractShapeAttribute = {
  x: number,
  y: number
} & AbstractShapeOptions;

export type ArcShapeSelfOptions = {
  radius?: number, // 圆弧的半径。
  startAngle?: number, // 圆弧的起始点， x轴方向开始计算，单位以弧度表示。
  endAngle?: number, // 圆弧的终点， 单位以弧度表示。
  anticlockwise?: boolean // 如果为 true，逆时针绘制圆弧，反之，顺时针绘制。
};

export type ArcShapeSelfAttribute = {
  radius: number,
  startAngle: number,
  endAngle: number,
} & ArcShapeSelfOptions;

export type ArcShapeOptions = AbstractShapeOptions & ArcShapeSelfOptions;

export type ArcShapeAttribute = AbstractShapeAttribute & ArcShapeSelfAttribute;

export type ShapeOptions = {
  event?: boolean
} & AbstractShapeOptions & ArcShapeSelfOptions;

export type CanvasContext2DAttribute = 'fillStyle' | 'font' | 'globalAlpha' |
'globalCompositeOperation' | 'imageSmoothingEnabled' | 'lineCap' | 'lineDashOffset' |
'lineJoin' | 'lineWidth' | 'miterLimit' | 'shadowBlur' | 'shadowColor' | 'shadowOffsetX' |
'shadowOffsetY' | 'strokeStyle' | 'textAlign' | 'textBaseline';
